package com.atguigu.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Map;

// JWT工具类
public class JWTUtils {

    private static final String SIGNATURE = "~!S^Q@HNi)zx";// 公司的密钥，签名

    /*
    * 生成token   header.payload,signature
    * */
    public static String getToken(Map<String,String> map){

        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DATE,7);//默认7天过期

        // 创建 jwt builder
        JWTCreator.Builder builder = JWT.create();
        // header使用默认值
        // 添加payload
        map.forEach((key,value)->{
            builder.withClaim(key,value);
        });
        String token = builder.withExpiresAt(instance.getTime())// 指定令牌过期时间
                .sign(Algorithm.HMAC256(SIGNATURE));//设置签名
        return token;
    }


    /*
    * 验证token 合法性,不合法会抛出异常
    * 正确返回则获得DecodedJWT对象，可以获取token中的信息
    * */
    public static DecodedJWT verifyToken(String token) {
        DecodedJWT verify = JWT.require(Algorithm.HMAC256(SIGNATURE)).build().verify(token);
        return verify;
    }
}
